#include "window.h" 

struct chat_window g_win; 

//在initscr()和endwin()之间，不要使用ncurses库外的输出函数。
//使用ncurses必须使用initscr开始，和endwin结束。
//在使用endwin后，再使用ncurses必须再次使用initscr。

//给窗体画线
WINDOW *chat_win_create(int _h, int _w, int _y, int _x)
{
	WINDOW *win = newwin(_h, _w, _y, _x); //创建一个窗口,高宽为hw,从y行x列开始
	box(win, 0, 0);						  //为win窗口添加边框，0,0是起始行列
	return win;
}

//创建顶部窗口
void chat_win_create_header()
{
	//屏幕高度1/5，宽度1
	int _h = LINES / 5;
	int _w = COLS;
	//设置起始位置
	int _y = 0;
	int _x = 0;
	//创建窗口
	g_win.header = chat_win_create(_h, _w, _y, _x);
	//刷新顶部窗口
	wrefresh(g_win.header);
}

//创建输出窗口
void chat_win_create_output()
{
	//屏幕高度3/5，宽度4/5
	int _h = (3 * LINES) / 5;
	int _w = (4 * COLS) / 5;
	//设置起始位置
	int _y = LINES / 5;
	int _x = 0;
	//创建输出窗口并刷新
	g_win.output = chat_win_create(_h, _w, _y, _x);
	wrefresh(g_win.output);
}

//创建好友窗口
void chat_win_create_friends()
{
	//屏幕高度3/5，宽度1/5
	int _h = (3 * LINES) / 5;
	int _w = COLS / 5;
	//设置起始位置
	int _y = LINES / 5;
	int _x = (4 * COLS) / 5;
	//创建好友窗口并刷新
	g_win.friends = chat_win_create(_h, _w, _y, _x);
	wrefresh(g_win.friends);
}

//创建输出窗口
void chat_win_create_input()
{
	//屏幕高度1/5，宽度1
	int _h = LINES / 5;
	int _w = COLS;
	//设置起始位置
	int _y = (4 * LINES) / 5;
	int _x = 0;
	//创建输入窗口并刷新
	g_win.input = chat_win_create(_h, _w, _y, _x);
	wrefresh(g_win.input);
}


//从窗口里读出消息
void chat_win_get_str(WINDOW *win, char* out)
{
	wgetnstr(win, out, 64); //从窗口里传msg到out

	wrefresh(win); //重新刷新窗口
}

//窗口显示字符串str
void chat_win_put_str(WINDOW *win, int _y, int _x, const char* str)
{
	//str.c_str()返回当前字符串的首字符地址
	//如果移动窗口到y,x不报错，则将str显示在窗口
	mvwaddstr(win, _y, _x, str);

	wrefresh(win); //刷新窗口
}

//清除窗口一部分
void chat_win_clr_lines(WINDOW *_w, int begin, int lines)
{
	//从begin行开始，窗口清除lines行
	while (lines-- > 0)
	{
		wmove(_w, begin++, 0); //移动窗口
		wclrtoeol(_w);		   //从逻辑指针位置向右开始清除，直到行末
	}
}

// int main()
// {
// 	chat_window win;
// 	win.create_header();
// 	//wrefresh(win.header);
// 	win.create_output();
// 	//wrefresh(win.output);
// 	win.create_friends();
// 	//wrefresh(win.friends);
// 	win.create_input();
// 	//wrefresh(win.input);

// 	std::string tips = "Please Enter#";
// 	win.put_str(win.input,1,2,tips);	//在输出窗口第一行，第二列填充tips
// 	wrefresh(win.input);				//刷新显示

// 	std::string runing = "Welcome to chat system";

// 	int i = 1,j = 1;
// 	int _h,_w;
// 	while(1){

// 		int _y,_x;
// 		getmaxyx(win.header,_y,_x); //获得顶部窗口的最大行和列数
// 		win.clr_win_lines(win.header,_y/2,1); //清除顶部窗口从y/2开始的1行,因为要循化刷新runing的位置
// 		win.create_header();	//创建顶部窗口
// 		win.put_str(win.header,_y/2,j++,runing); //在顶部窗口的第y/2行、第j列的位置，显示runing字符串
// 		//从左到右循环
// 		if(j >= _x)
// 			j = 1;
// 		wrefresh(win.header);	//刷新

// 		win.put_str(win.output,i,2,tips);	//在输出窗口第i行，2列，显示tips字符串
// 		wrefresh(win.output);				//刷新
// 		usleep(20000);						//停留20ms，单位是微秒
// 		i++;
// 		getmaxyx(win.output,_h,_w);	//获得输出窗口的最大行和列数
// 		i %= (_h-1);	//保证在输出窗口范围内
// 		if(i == 0){
// 			win.clr_win_lines(win.output,1,_h-1); //清除整个输出窗口
// 			i = 1;	//从第一行开始
// 			win.create_output();	//新建输出窗口
// 			wrefresh(win.output);	//刷新
// 		}
// 	}
// }
